 #!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import sys
import subprocess
import platform
from pathlib import Path

class CertificateInstaller:
    def __init__(self):
        self.mitmproxy_dir = Path.home() / '.mitmproxy'
        self.cert_file = self.mitmproxy_dir / 'mitmproxy-ca-cert.pem'
        self.system = platform.system()
    
    def check_certificate_exists(self):
        """检查mitmproxy证书是否存在"""
        if not self.cert_file.exists():
            print("❌ mitmproxy证书文件不存在")
            print(f"   请先启动代理服务器生成证书文件")
            print(f"   证书文件路径: {self.cert_file}")
            return False
        
        print(f"✅ 找到mitmproxy证书文件: {self.cert_file}")
        return True
    
    def install_certificate_macos(self):
        """在macOS上安装证书"""
        try:
            print("\n📋 在macOS上安装证书...")
            
            # 添加证书到系统钥匙串
            cmd = [
                'sudo', 'security', 'add-trusted-cert',
                '-d', '-r', 'trustRoot',
                '-k', '/Library/Keychains/System.keychain',
                str(self.cert_file)
            ]
            
            print("🔐 需要管理员权限来安装证书到系统钥匙串...")
            result = subprocess.run(cmd, capture_output=True, text=True)
            
            if result.returncode == 0:
                print("✅ 证书已成功安装到系统钥匙串")
                return True
            else:
                print(f"❌ 证书安装失败: {result.stderr}")
                return False
                
        except Exception as e:
            print(f"❌ 安装证书时出错: {e}")
            return False
    
    def show_manual_instructions(self):
        """显示手动安装说明"""
        print("\n📖 手动安装证书说明:")
        print("="*50)
        
        if self.system == "Darwin":  # macOS
            print("🍎 macOS 手动安装步骤:")
            print("1. 双击证书文件打开钥匙串访问")
            print(f"   证书文件: {self.cert_file}")
            print("2. 选择'系统'钥匙串")
            print("3. 找到'mitmproxy'证书，双击打开")
            print("4. 展开'信任'部分")
            print("5. 将'使用此证书时'设置为'始终信任'")
            print("6. 关闭窗口并输入密码确认")
            
        elif self.system == "Linux":
            print("🐧 Linux 手动安装步骤:")
            print("1. 复制证书到系统目录:")
            print(f"   sudo cp {self.cert_file} /usr/local/share/ca-certificates/mitmproxy-ca-cert.crt")
            print("2. 更新证书存储:")
            print("   sudo update-ca-certificates")
            
        elif self.system == "Windows":
            print("🪟 Windows 手动安装步骤:")
            print("1. 以管理员身份运行命令提示符")
            print("2. 执行以下命令:")
            print(f"   certutil -addstore -f Root \"{self.cert_file}\"")
            print("或者:")
            print("1. 双击证书文件")
            print("2. 点击'安装证书'")
            print("3. 选择'本地计算机'")
            print("4. 选择'将所有证书都放入下列存储'")
            print("5. 选择'受信任的根证书颁发机构'")
            print("6. 完成安装")
        
        print("\n🌐 浏览器特殊说明:")
        print("- Chrome/Edge: 重启浏览器后生效")
        print("- Firefox: 需要在Firefox中单独导入证书")
        print("  设置 → 隐私与安全 → 证书 → 查看证书 → 证书颁发机构 → 导入")
    
    def install(self):
        """安装证书"""
        print("🔒 mitmproxy证书安装工具")
        print("="*40)
        
        if not self.check_certificate_exists():
            return False
        
        print(f"\n🖥️  检测到系统: {self.system}")
        
        # 尝试自动安装
        success = False
        if self.system == "Darwin":
            success = self.install_certificate_macos()
        else:
            print(f"❌ 暂不支持自动安装，请参考手动安装说明")
        
        if success:
            print("\n🎉 证书安装成功！")
            print("📝 接下来的步骤:")
            print("1. 重启浏览器")
            print("2. 重新设置代理 (127.0.0.1:8080, 端口可在config.yaml中修改)")
            print("3. 现在应该可以正常访问HTTPS网站了")
        else:
            print("\n⚠️  自动安装失败，请参考手动安装说明:")
            self.show_manual_instructions()
        
        return success

def main():
    installer = CertificateInstaller()
    installer.install()

if __name__ == '__main__':
    main()